home *** CD-ROM | disk | FTP | other *** search
Text File | 1992-07-15 | 3.5 KB | 142 lines | [TEXT/MPS ] |
- {© G. Sawitzki, StatLab Heidelberg 1986-1991}
-
-
- {***************************************************************}
-
- var goodByeMsgHeader:tMsgHeader; {bad pgmming:fixed buffer, no semaphore… just lazy}
- procedure SendLocalGoodBye(who:longint);
- var msg:msgPtr;
- me,Dest:msgAddr;
- BEGIN
- if who<>0 then
- begin
- preparemessageHeader(goodByeMsgHeader,aDone);
- me:=NetWorkScheduler.MySelf;
- Dest.p:=who;
- Dest.a := 0; { local }
- if master then if
- postmsg(msg,nil,cMsgNAttention+cMustBeLaunched,
- NetWorkScheduler.TaskGenerator.ContextStamp,
- Dest,me,
- @goodByeMsgHeader,sizeof(goodByeMsgHeader),nil,0)<>noErr then;
- end;
- END;
-
-
-
- {**********************************************************}
- {try to pass all messages through this function. The information
- passed in moreinfo belongs to the recipient.}
- function ProcessMsg(var msghdr:tMsgHeader; var moreinfo:handle;islocal:boolean):osErr;
- begin
- ProcessMsg:=NoErr;
-
- with msgHdr do
- case action of
- aNoop:;
- aExample:;
- aDone:ProgramBreak('Bad action code: aDone');
- aShow:begin {if it is a picture, show it}
- DoTaskUpdate(moreinfo,msghdr,islocal);
- end;
-
- otherwise
-
- end;
- if moreinfo<>nil then begin
- disposHandle(moreinfo);
- moreinfo:=nil;
- end;
- end;
-
-
- {=============================================================================}
-
- {handlers for the communication system}
-
-
-
-
- {---------------------------------------------------------------}
- { MyTaskGenerator }
-
- {We send a header of small, fixed size, and no data. We expect quick
- transmission, and very rare situations of multiple use.
- Buffer strategy: one recycled dynamic buffer, with possibly additional
- buffers.}
-
- type
- tMyTaskGenerator=object(tTaskGenerator)
- latchedbuffer:tMsgHeaderPtr;
- procedure init; override;
- function tMyTaskGenerator.NewTask(var msg:MsgPtr):boolean;override;
- function tMyTaskGenerator.NewPrioPtr(var PrioSize:longint):ptr;override;
- function tMyTaskGenerator.NewCorePtr(var CoreSize:longint):ptr;override;
- procedure tMyTaskGenerator.DisposPrioPtr(var PrioPtr:UNIV Ptr);override;
- procedure tMyTaskGenerator.DisposCorePtr(var CorePtr:UNIV Ptr);override;
- end;
-
- procedure tMyTaskGenerator.init;
- begin
- inherited init;
- latchedbuffer:=nil;
- TickleInterval:=5;
- Waitinterval:=1;
- end;
-
-
- function tMyTaskGenerator.NewTask(var Msg:MsgPtr):boolean;override;
- var tempstr,s:str255;
- l:longint;
- begin
- NewTask:=inherited NewTask(Msg);
-
- with msg^ do if MsgDest.a<>0 then
- begin
- MsgPrioSize:=sizeof(tMsgHeader);
-
- if (theConfiguration.UseMessageSizes) & (MsgPrioSize<= theConfiguration.MinPrioSize) then
- MsgPrioSize:=theConfiguration.MinPrioSize;
-
- MsgPrioPtr:=NewPrioPtr(MsgPrioSize);
- if MsgPrioPtr<>nil then begin
- DefineTask(tMsgHeaderPtr(MsgPrioPtr)^);
- NewTask:=true;
- stamp(msg);
- end;
- end;
- end;
-
- function tMyTaskGenerator.NewPrioPtr(var PrioSize:longint):ptr;override;
- begin
- if (latchedbuffer<>nil) & (PrioSize>GetPtrSize(Ptr(latchedbuffer))) then
- begin
- DisposPtr(Ptr(latchedbuffer));
- latchedbuffer:=nil;
- end;
- if latchedbuffer<>nil then begin
- if spare then ProgramBreak(' overrun');
- NewPrioPtr:=Ptr(latchedbuffer);
- latchedbuffer:=nil;
- end
- else NewPrioPtr:=NewPtr(PrioSize);
- end;
-
- procedure tMyTaskGenerator.DisposPrioPtr(var PrioPtr:UNIV Ptr);override;
- begin
- if latchedbuffer=nil then latchedbuffer:=tMsgHeaderPtr(PrioPtr) else disposPtr(PrioPtr);
- PrioPtr:=nil;
- end;
-
- function tMyTaskGenerator.NewCorePtr(var CoreSize:longint):ptr;override;
- begin
- ProgramBreak('not implemented');
- NewCorePtr:=nil;
- end;
-
- procedure tMyTaskGenerator.DisposCorePtr(var CorePtr:UNIV Ptr);override;
- begin
- ProgramBreak('not implemented');
- end;
-
-